const request = require('../libs/request');

class CdnService  {

    /**
     * 获取阿里云CDN签名
     * @param {string} ext 文件扩展名
     * @param {string} type 文件类型
     * @returns {Promise<Object>} 返回CDN签名结果
     */
    static async getAliyunCredit() {
		try {
			const response = await request.get('/cdn/createAliyunSignUrl');
            
			// 检查后端返回的状态码
			if (response.code === 1) {
				return {
					success: true,
					data: response.data,
					message: response.msg
				};
			} else {
				return {
					success: false,
					data: null,
					message: response.msg
				};
			}
		} catch (error) {
			return {
				success: false,
				data: null,
				message: error.message
			};
		}
	}

    /**
     * 生成文件路径
     * @param {string} moduleName 模块名
     * @param {string} fileExt 文件扩展名（如：.jpg, .png, .mp4）
     * @returns {string} 返回生成的路径
     */
    static generateFilePath(moduleName, fileExt) {
        // 获取当前日期
        const now = new Date();
        const year = now.getFullYear();
        const month = String(now.getMonth() + 1).padStart(2, '0');
        const day = String(now.getDate()).padStart(2, '0');
        
        // 生成时间戳和随机数，确保唯一性
        const timestamp = Date.now();
        const randomNum = Math.floor(Math.random() * 10000);
        
        // 确保文件扩展名以点开头
        const ext = fileExt.startsWith('.') ? fileExt : `.${fileExt}`;
        
        // 生成随机值（时间戳+随机数+模块名哈希）
        const moduleHash = this.hashCode(moduleName);
        const randomValue = `${timestamp}_${randomNum}_${moduleHash}`;
        
        // 构造路径：模块名/年/月/日/随机值+文件扩展名
        const path = `${moduleName}/${year}/${month}/${day}/${randomValue}${ext}`;
        
        return path;
    }

    /**
     * 简单的字符串哈希函数
     * @param {string} str 要哈希的字符串
     * @returns {string} 哈希值
     */
    static hashCode(str) {
        let hash = 0;
        if (str.length === 0) return hash.toString();
        
        for (let i = 0; i < str.length; i++) {
            const char = str.charCodeAt(i);
            hash = ((hash << 5) - hash) + char;
            hash = hash & hash; // 转换为32位整数
        }
        
        return Math.abs(hash).toString(16);
    }

}

module.exports = CdnService; 